Esempi di file JavaScript o JScript per proxy automatico

Di seguito sono riportate dieci procedure che forniscono esempi di utilizzo di un file .pac per specificare un URL per proxy automatico. Per utilizzare queste funzioni, Φ necessario modificare i nomi dei proxy, i numeri di porta e gli indirizzi IP.

Note

Esempio 1 - Gli host locali effettuano la connessione direttamente, tutti gli altri attraverso un proxy

La funzione riportata di seguito verifica che il nome dell'host corrisponda a un host locale e, in caso affermativo, che la connessione sia diretta. Se il nome dell'host non corrisponde a un host locale, la connessione avverrα attraverso il proxy (proxy).

function FindProxyForURL(url, host)
    {
        if (isPlainHostName(host))
            return "DIRECT";
        else
            return "PROXY proxy:80";
    }

La funzione isPlainHostName() controlla la presenza di punti all'interno del nome dell'host. In caso affermativo restituisce false, altrimenti restituisce true.

Esempio 2 - Gli host all'interno del firewall effettuano la connessione direttamente, i server locali all'esterno attraverso un proxy

La funzione riportata di seguito verifica che il nome dell'host non includa il nome del dominio oppure che sia parte di un particolare dominio (.societa.it), ma che non sia www o home.

function FindProxyForURL(url, host)
    {
        if ((isPlainHostName(host) ||
             dnsDomainIs(host, ".societa.it")) &&
            !localHostOrDomainIs(host, "www.societa.it") &&
            !localHostOrDoaminIs(host, "home.societa.it"))

            return "DIRECT";
        else
            return "PROXY proxy:80; PROXY proxy:80";
    }

Note

Esempio 3 - Se Φ possibile risolvere l'host, effettuare la connessione direttamente, altrimenti attraverso un proxy

La funzione riportata di seguito richiede al server DNS di risolvere il nome dell'host che gli viene passato. Se questo si verifica, la connessione verrα effettuata direttamente, in caso contrario attraverso un proxy. Questa funzione risulta utile quando viene utilizzato un server interno DNS per la risoluzione di tutti gli host interni.

function FindProxyForURL(url, host)
    {
        if (isResolvable(host))
            return "DIRECT";
        else
            return "PROXY proxy:80";
    }

Vedere la nota sulla funzione isResolvable() all'inizio della pagina.

Esempio 4 - Se l'host si trova nella subnet, effettuare la connessione direttamente, altrimenti attraverso un proxy

La funzione riportata di seguito confronta una mask e un modello di indirizzo IP specificati con il nome dell'host. Questa funzione risulta utile quando alcuni host di una subnet devono essere connessi direttamente mentre altri devono essere connessi attraverso un proxy.

function FindProxyForURL(url, host)
    {
        if (isInNet(host, "999.99.9.9", "255.0.255.0"))
            return "DIRECT";
        else
            return "PROXY proxy:80";
    }

Vedere la nota sulla funzione isInNet() all'inizio della pagina.

La funzione isInNet(host, modello, mask) restituisce true se l'indirizzo IP dell'host corrisponde al modello specificato. La mask indica quale parte dell'indirizzo IP deve corrispondere (255=ricerca corrispondenza, 0=ignora).

Esempio 5 - Determinare il tipo di connessione sulla base del dominio dell'host

La funzione riportata di seguito specifica una connessione diretta se l'host Φ locale. In caso contrario, la funzione determinerα quale proxy dovrα essere utilizzato a seconda del dominio dell'host. Questa funzione risulta utile se il nome del dominio dell'host Φ uno dei criteri di selezione del proxy.

function FindProxyForURL(url, host)
    {
        if (isPlainHostName(host))
            return "DIRECT";
        else if (shExpMatch(host, "*.com"))
            return "PROXY comproxy:80";
        else if (shExpMatch(host, "*.edu"))
            return "PROXY eduproxy:80";
        else
            return "PROXY proxy";
    }

La funzione shExpMatch(str, shexp) restituisce true se str corrisponde a shexp utilizzando modelli di espressione di shell.

Esempio 6 - Determinare il tipo di connessione sulla base del protocollo utilizzato

La funzione riportata di seguito estrae il protocollo utilizzato e sulla base di questo esegue una selezione di proxy. Se non Φ possibile trovare una corrispondenza con un protocollo, verrα effettuata una connessione diretta. Questa funzione risulta utile quando il protocollo utilizzato Φ uno dei criteri di selezione del proxy.

function FindProxyForURL(url, host)
    {
	    if (url.substring(0, 5) == "http:") {
		return "PROXY proxy:80";
	    }
	    else if (url.substring(0, 4) == "ftp:") {
		return "PROXY fproxy:80";
	    }
	    else if (url.substring(0, 7) == "gopher:") {
		return "PROXY gproxy";
	    }
	    else if (url.substring(0, 6) == "https:") {
		return "PROXY secproxy:8080";
	    }
	    else {
		return "DIRECT";
	    }
    }

La funzione substring() estrae da una stringa il numero di caratteri specificato.

Esempio 7 - Determinare l'impostazione del proxy verificando che il nome dell'host corrisponda all'indirizzo IP

La funzione riportata di seguito effettua la selezione di un proxy convertendo il nome dell'host in un indirizzo IP e confrontandolo con una stringa specificata.

function FindProxyForURL(url, host)
    {
	    if (dnsResolve(host) == "999.99.99.999") {  // = http://secproxy
		return "PROXY secproxy:8080";
	    }
	    else {
		return "PROXY proxy:80";
	    }
    }
	

Vedere la nota sulla funzione dnsResolve() all'inizio della pagina.

Esempio 8 - Effettuare una connessione attraverso un proxy se l'indirizzo IP dell'host corrisponde a un indirizzo IP specificato, altrimenti effettuare la connessione direttamente

La funzione riportata di seguito consente di effettuare la selezione di un proxy sulla base di un indirizzo IP specificato. A differenza dell'Esempio 7 in quest'esempio la funzione viene chiamata per recuperare esplicitamente l'indirizzo IP numerico. Nell'Esempio 7 viene utilizzata la funzione dnsResolve() per convertire il nome dell'host nell'indirizzo IP numerico.

function FindProxyForURL(url, host)
    {
	    if (myIpAddress() == "999.99.999.99") { 
		return "PROXY proxy:80";
	    }
	    else {
		return "DIRECT";
	    }
    }

La funzione myIpAddress() restituisce in formato composto da numeri interi separati da punti l'indirizzo IP dell'host sul quale Φ in esecuzione il browser.

Esempio 9 - Effettuare una connessione attraverso un proxy se il nome dell'host contiene punti, altrimenti effettuare la connessione direttamente

La funzione riportata di seguito verifica la presenza di punti nel nome dell'host. In caso affermativo, la connessione verrα effettuata attraverso un proxy, altrimenti verrα effettuata direttamente. Questa funzione consente di determinare il tipo di connessione sulla base delle caratteristiche del nome dell'host.

function FindProxyForURL(url, host)
    {
	    if (dnsDomainLevels(host) > 0) {  // se il numero di punti in host > 0
		return "PROXY proxy:80";
	    }
		return "DIRECT";
    }

La funzione dnsDomainLevels() restituisce un numero intero uguale al numero di punti presenti nel nome dell'host.

Esempio 10 - Specificare i giorni della settimana in cui effettuare la connessione attraverso un proxy

La funzione riportata di seguito determina il tipo di connessione specificando i giorni della settimana in cui utilizzare un proxy. Nei giorni che non sono compresi tra quelli specificati viene effettuata una connessione diretta. Questa funzione potrebbe essere utilizzata per impiegare un proxy quando il traffico di dati Φ particolarmente intenso e per consentire una connessione diretta quando il traffico Φ minore.

function FindProxyForURL(url, host)
    {
	if(weekdayRange("WED", "SAT", "GMT")) 
	  return "PROXY proxy:80";
	else 
	  return "DIRECT";
    }

La funzione weekdayRange( <giorno1> [,<giorno2>] [,<fGMT>] ) restituisce true se l'ora di sistema corrente si trova all'interno dell'intervallo specificato dai parametri <giorno1>, <giorno2> e <fGMT>. Solo il primo parametro è necessario. Il parametro GMT stabilisce che l'ora debba essere considerata in base all'ora di Greenwich (GMT, Greenwich Mean Time) anziché in base al fuso orario locale.

Nota
Quando la funzione viene chiamata con <giorno1> == <giorno2>, il risultato restituito dalle precedenti versioni di Microsoft Internet Explorer Φ diverso da quello di Netscape Navigator&trade. Le precedenti versioni di Internet Explorer interpretano l'intervallo come una settimana intera, mentre Microsoft Internet Explorer 4.0 e Netscape Navigator&trade interpretano l'intervallo come un singolo giorno. Se ad esempio il giorno corrente Φ luned∞, la chiamata weekdayRange("TUE", "TUE") restituisce true con le precedenti versioni di Internet Explorer e false con Microsoft Internet Explorer 4.0 e Netscape Navigator&trade.